#!/bin/bash
#Comando Recept
#
#Descripcion
#El proposito de este comando es detectar la llegada de archivos al directorio $NOVEDIR y aceptar o recharzar los mismos.
#


COMANDO="Recept.sh"

#Chequeo que el ambiente este inicializado
if [[ -z "$BINDIR" ]]; then
	Logging.sh $COMANDO "Ambiente no inicializado correctamente. Ejecute el Initier.sh primero." "E"
	exit 1
fi

	

#Contador de ciclos
numCiclo=0
sleepTime=$SLEEPTIMECONF #en segundos.
FECHA_INVALIDA=10;
ENTIDAD_INEXISTENTE=11;
FECHA_MAYOR_A_LO_ESPERADO=12;
FECHA_MENOR_A_LO_ESPERADO=14;
NO_ES_UN_ARCHIVO_REGULAR=15;
ARCHIVO_VACIO=16;
NO_EXISTE_CAMARA=17;
NO_EXISTE_TRIBUNAL=18;
DIAS_MAXIMOS=16;
MAESTRO_BANCO="$MAEDIR/bancos.dat";
MAESTRO_CAMARAS="$MAEDIR/camaras.dat";
MAESTRO_TRIBUNAL="$MAEDIR/pjn.dat";



#valida una fecha pasada por parametro 
function validar_fecha()
{
  date -d $1 +"%Y%m%d" 2>>/dev/null
  if [ $? -eq 0 ]
   then 
    return 0;
   else
    return $FECHA_INVALIDA;
  fi 
}

#verifica la existencia de la entidad en el maestaro de Bancos
function existe_entidad()
{
  echo "existe enitdad en archivo de bancos";
  EXISTE=`cat $MAESTRO_BANCO | cut -d';' -f1 | grep -c $1`
  
  if [  $EXISTE -gt 0 ]
  then 
     return 0;
  else
     return $ENTIDAD_INEXISTENTE;
  fi 
}

#La fecha del archivo no debe tener una antiguedad mayor a 15 dias y no debe tener una fecha 
# mayor a la fecha de corrida del proceso
# la antiguedad la da el valor que forma parte del nombre del archivo
function validar_rango_fecha()
{
    FECHA_LIMITE=`date -d "- $DIAS_MAXIMOS day" +"%Y%m%d"`;
    FECHA_ACTUAL=`date -d "+ 1 day" +"%Y%m%d"`;
    if [ $1 -gt $FECHA_LIMITE ]
    then 
         if [ $1 -lt $FECHA_ACTUAL ]
           then
              return 0;
          else 
              return $FECHA_MAYOR_A_LO_ESPERADO;
          fi
    else
         return  $FECHA_MENOR_A_LO_ESPERADO;
    fi 
}


#Verifica que el archivo que es pasado por parametro sea valido para el sistema
# es decir que sea un archivo comun y no se encuentre vacio

function archivo_valido()
{
   if [ -f $1 ]
   then 
      if [ -s $1 ]
      then 
          return 0;
      else 
         return  $ARCHIVO_VACIO;
      fi
   else
    return $NO_ES_UN_ARCHIVO_REGULAR;
   fi      
   
}

#Verifica si la camara pasada por parametro se encuentra en el maestro de camaras
#en caso de no existir la camara retorna NO_EXISTE_CAMARA, en caso contrario 0
function existe_camara()
{
    echo "existe camara $1 ?";
  EXISTE=`cat $MAESTRO_CAMARAS | cut -d';' -f1 | grep -c $1`
  
  if [  $EXISTE -gt 0 ]
  then 
     return 0;
  else
     return $NO_EXISTE_CAMARA;
  fi 
}

#verifica si el tribunal se encuentra en el archivo maestro de triibunales
#en caso de no existir devuelve NO_EXISTE_TRIBUNAL, en caso contrario 0
function existe_tribunal()
{
   echo "existe tribunal $1 ...";
  EXISTE=`cat $MAESTRO_TRIBUNAL | cut -d';' -f1 | grep -c $1`
  
  if [  $EXISTE -gt 0 ]
  then 
     return 0;
  else
     return $NO_EXISTE_TRIBUNAL;
  fi 
}
# Se encarga de determinar a donde es movido el archivo dependiendo de su estado luego de la validacion 
# Recibe por parametro el 
# estado de la validacion 
# nombre del archivo a ser movido
# Tipo archivo procesado (5=SALDOS | 6=EXPEDIENTES)


function resolver_estado()
{
      ARCHIVO=$2;
      if [ $1 -eq 0 ]
       then 
#             echo "El archivo es valido y debe moverse a ";
#            echo "Archivo de saldo aceptado $2";
             MOTIVO_RECHAZO="";
       elif [ $1 -eq $ENTIDAD_INEXISTENTE ]
         then 
#            echo "El banco no existe en el maestro de Bancos favor de verificar, archivo =$2 ENTIDAD_INEXISTENTE";
            MOTIVO_RECHAZO="Entidad inexistente";
       elif [ $1 -eq $FECHA_MAYOR_A_LO_ESPERADO ]
         then 
#            echo "La fecha del archivo debe ser menor a la fecha en la cual se corre el proceso archivo=$2  FECHA_MAYOR_A_LO_ESPERADO";
            MOTIVO_RECHAZO="Fecha mayor a la ejecucion del proceso (`date +F"%Y-%m-%d"`)";
       elif [ $1 -eq $FECHA_INVALIDA ]
        then 
#            echo "El archivo no respeta el formato de la fecha estipulada archivo =$2 FECHA_INVALIDA";
            MOTIVO_RECHAZO="Fecha del archivo invalida";
       elif [ $1 -eq $FECHA_MENOR_A_LO_ESPERADO ] 
        then 
#         echo "El archivo no es menor a lo esperado debe encontrarse dentro de los $DIAS_MAXIMOS archivo=$2 FECHA_MENOR_A_LO_ESPERADO";
         MOTIVO_RECHAZO="La fecha del archivo no se encuentra dentro del rango estipulado";
       
       elif [ $1 -eq $NO_ES_UN_ARCHIVO_REGULAR ] 
        then 
#             echo "El archivo no es un archivo de texto archivo=$2 NO_ES_UN_ARCHIVO_REGULAR";
             MOTIVO_RECHAZO="El tipo de archivo no es el esperado";
       elif [ $1 -eq $ARCHIVO_VACIO ] 
        then 
#          echo "El archivo se encuentra vacio archivo=$2 ARCHIVO_VACIO"; 
          MOTIVO_RECHAZO="El archivo se encuentra vacio";
       elif [ $1 -eq $NO_EXISTE_CAMARA ]    
        then    
          MOTIVO_RECHAZO="No existe camara en el archivo maestro";
       elif [ $1 -eq $NO_EXISTE_TRIBUNAL ] 
        then 
          MOTIVO_RECHAZO="No existe tribunal en el archivo maestro";     
       else 
#          echo "No existe condicion para el estado enviado por parametro ESTADO= $1, archivo =$2";
          MOTIVO_RECHAZO="Rechazo de archivo no identificado";
       fi
       
       if [ $3 -eq 5 ]
       then
          LEYENDA="Archivo de Saldos Aceptado";
       else
             LEYENDA="Archivo de Expedientes Aceptado";
       fi 
       
       if [ $1 -eq 0 ]
       then
          Logging.sh $COMANDO "$LEYENDA: $ARCHIVO" "I";
           Mover.sh "$NOVEDIR/$ARCHIVO" "$ACEPDIR/$ARCHIVO" $COMANDO;
       else
          Logging.sh $COMANDO "Archivo Rechazado:<$ARCHIVO>.Motivo: ($MOTIVO_RECHAZO)" "I";
           Mover.sh "$NOVEDIR/$ARCHIVO" "$RECHDIR/$ARCHIVO" $COMANDO;
       fi
   }



while [[ true ]]; do
	#Iniciando ciclo
	numCiclo=$(($numCiclo+1))
	Logging.sh $COMANDO "Ciclo $numCiclo iniciado." "I"
	
	#Validaciones sobre los archivos de saldo 
        for archivo_saldo in `ls -1 $NOVEDIR | grep '^[A-Za-z0-9]*_[0-9]\{8\}$'`
        do 
            ESTADO_ARCHIVO=0;
            entidad=`echo $archivo_saldo| cut -d'_' -f1`;
            fecha_saldo=`echo $archivo_saldo| cut -d'_' -f2`;
            archivo_valido $NOVEDIR/$archivo_saldo;
            ESTADO_ARCHIVO=$?;
            if [ $ESTADO_ARCHIVO -eq 0 ]
            then
                validar_fecha $fecha_saldo;
                ESTADO_ARCHIVO=$?;
                if [ $ESTADO_ARCHIVO -eq 0 ]
                  then
                    validar_rango_fecha $fecha_saldo
                    ESTADO_ARCHIVO=$?;
                    if [ $ESTADO_ARCHIVO -eq 0 ]
                     then 
                       existe_entidad $entidad;
                       ESTADO_ARCHIVO=$?;
                    fi
                fi
            fi    
            resolver_estado $ESTADO_ARCHIVO $archivo_saldo 5;
        done 
        
        #Validaciones sobre los archivos que se ajustan al patron de los archivos tipo expediente
        for archivo_expediente in `ls -1 $NOVEDIR | grep '^[A-Za-z0-9._-]*@[A-Za-z0-9._-]*$'`
        do 
            ESTADO_ARCHIVO=0;
            camara=`echo $archivo_expediente| cut -d'@' -f1`;
            tribunal=`echo $archivo_expediente| cut -d'@' -f2`;
           
            echo "ARCHIVO A ANALIZAR [$NOVEDIR/$archivo_expediente]"
            archivo_valido $NOVEDIR/$archivo_expediente;
            ESTADO_ARCHIVO=$?;
            if [ $ESTADO_ARCHIVO -eq 0 ]
            then
               existe_camara $camara;
               ESTADO_ARCHIVO=$?;
               if [ $ESTADO_ARCHIVO -eq 0 ]
               then 
                 existe_tribunal $tribunal;
                 ESTADO_ARCHIVO=$?
               fi  
            fi       
            resolver_estado $ESTADO_ARCHIVO $archivo_expediente 6;
        done 
        

	#Recorro los demas archivos en el directorio y ya que no coincidian con ninguno de los criterios anteriores los rechazo
	for archivo_no_valido in `ls -1 $NOVEDIR | grep -v '^[A-Za-z0-9._-]*@[A-Za-z0-9._-]*$' | grep -v '^[A-Za-z0-9]*_[0-9]\{8\}$'`
         do 
		Logging.sh $COMANDO "archivo: $archivo_no_valido invalido. No matcheo los criterios anteriores." "I"
		Mover.sh "$NOVEDIR/$archivo_no_valido" "$RECHDIR/$archivo_no_valido" $COMANDO
         done 
	
	
	if [ `ls -1 $ACEPDIR | grep -c '^[A-Za-z0-9]*_[0-9]\{8\}$'` -gt 0 ]
	then 
	    if [ -z $(. obtpid.sh "Fsoldes.sh") ]
	    then 
	        if [ -z $(. obtpid.sh "Cdossier.sh") ]
	         then
	            Logging.sh $COMANDO "Iniciando Fsoldes." "I"
	    	Fsoldes.sh &
	    	fsoldesID=$(. obtpid.sh "Fsoldes.sh")
	    	echo "Fsoldes iniciado con ID: $fsoldesID"
	    	Logging.sh $COMANDO "Fsoldes iniciado con ID: $fsoldesID" "I"
                 else
                   Logging.sh $COMANDO "Llamada a Fsoldes.sh pospuesta,se encuentra en ejecucion Cdossier" "I"
	        fi
	     else
                 Logging.sh $COMANDO "Llamada a Fsoldes.sh pospuesta,ya se encuentra ejecutando." "I"
            fi
        fi

	if [ `ls -1 $ACEPDIR | grep -c '^[A-Za-z0-9._-]*@[A-Za-z0-9._-]*$'` -gt 0 ]
	then 
	    if [ -z $(. obtpid.sh "Cdossier.sh") ]
	    then 
	        if [ -z $(. obtpid.sh "Fsoldes.sh") ]
	         then
	            Logging.sh $COMANDO "Iniciando Cdossier." "I"
	    	    Cdossier.sh &
	    	    cdossierID=$(. obtpid.sh "Cdossier.sh")
	    	    echo "Cdossier iniciado con ID: $cdossierID"
	    	    Logging.sh $COMANDO "Cdossier iniciado con ID: $cdossierID" "I"
                 else
                   Logging.sh $COMANDO "Llamada a Cdossier.sh pospuesta,se encuentra ejecutando Fsoldes." "I"
	        fi
	     else
                 Logging.sh $COMANDO "Llamada a Cdossier.sh pospuesta, ya se encuentra ejecutando ." "I"
            fi
        fi
	sleep $sleepTime
done
